package com.dongnao.barry.ls38_rxjavaopertor.rxjava;

import android.util.Log;

/**
 * Created by Administrator on 2018/5/28.
 */
//人民日报（被观察者Observable）

public class Obserable<T> {
    private static final String TAG = Obserable.class.getName();
    /** 通过create创建第一个Obserable（被观察者）即人民日报时，此时  onSubscribe 为人民日报发射器（编辑部门）
     *  第二次 通过map方法创建第二Obserable（被观察者）即 造纸厂时，此时 onSubscribe  造纸厂的制作部门即造纸厂的发射器  */
    private ObservableOnSubscribe onSubscribe;

    private Obserable(ObservableOnSubscribe onSubscribe) {
        this.onSubscribe = onSubscribe;
    }

    //    创造操作符 create
    public static <T> Obserable<T> create(ObservableOnSubscribe<T> onSubscribe) {
        //人民日报
        return new Obserable<T>(onSubscribe);
    }

    /**
     * 该方法被最后一个被观察者调用
     * @param subscrible 观察者  顾客
     *
     */
//    Observer<? super T>    存   add     set   subscribe   变换操作符   区别 存
    public  void subscrible(Observer<? super T> subscrible){
        Log.e(TAG, "subscrible:-------> " + subscrible.getClass().getName());
        onSubscribe.subscribe(subscrible);
    }

//    转换操作符
    public <R> Obserable<R> map(Function<? super T,? extends  R> function) {
        //造纸厂
//          OnSubscribleLift  造纸厂发射器 制作部门  且关联人民日报发射器
        return new Obserable<>(new OnSubscribleLift(onSubscribe,function));

    }
}
